home *** CD-ROM | disk | FTP | other *** search
/ Deutsche Edition 1 / Deutsche Edition 1.iso / amok / 051-060 / amok58 / audiosupport1.1 / audiodemo.mod < prev    next >
Text File  |  1993-11-04  |  3KB  |  98 lines

  1. (*-------------------------------------------------------------------------
  2. :Program.       AudioDemo.mod
  3. :Contents.      Die Shepard Tonskala
  4. :Author.        Christian Stiens
  5. :Address.       Heustiege 2, W-4710 Lüdinghausen
  6. :Copyright.     PD
  7. :Language.      OBERON
  8. :Translator.    Amiga Oberon V2.01, [fbs]
  9. :Imports.       AudioSupport
  10. -------------------------------------------------------------------------*)
  11.  
  12. MODULE AudioDemo;
  13.  
  14.   IMPORT
  15.     e  : Exec,
  16.     sys: SYSTEM,
  17.     as : AudioSupport,
  18.     g  : Graphics,
  19.     d  : Dos,
  20.     t  : MathTrans,
  21.     I  : Intuition;
  22.  
  23.   CONST (* $DataChip+ *)
  24.     wave = "\x00\x5A\x7F\x5A\x00\xA6\x81\xA6";
  25.  
  26.   VAR
  27.     nw      : I.NewWindow;
  28.     win     : I.WindowPtr;
  29.     rp      : g.RastPortPtr;
  30.     msg     : I.IntuiMessagePtr;
  31.     i       : INTEGER;
  32.     arg     : ARRAY 4 OF REAL;
  33.     chan    : SHORTINT;
  34.  
  35.   CONST
  36.     closeWindow  = LONGSET{I.closeWindow};
  37.     normalWindow = LONGSET{0..3,10,12};
  38.  
  39.  
  40.   PROCEDURE PlayShepard(chan: SHORTINT; a: REAL);  (* 0 <= a < 1 *)
  41.     VAR per,vol: INTEGER;
  42.   BEGIN
  43.     vol := SHORT(ENTIER((1-t.Cos(6.2831853*a)) * 32 + 0.5));
  44.     per := SHORT(ENTIER(300 * t.Exp((1.0-a)*1.38629436) + 0.5));
  45.     as.ModifySound(chan,per,vol);
  46.   END PlayShepard;
  47.  
  48.  
  49. BEGIN
  50.   win := NIL;
  51.  
  52.   i := 0; WHILE i < 4 DO
  53.     chan := as.OpenChannel({i});
  54.     as.PlaySound(chan,sys.ADR(wave),8,500,0,0);
  55.   INC(i) END;
  56.  
  57.   nw := I.NewWindow(50,50,450,70,-1,-1,closeWindow,normalWindow,NIL,NIL,
  58.                     sys.ADR("The Shepard Scale"),NIL,NIL,90,40,-1,-1,{0});
  59.   win := I.OpenWindow(nw); IF win = NIL THEN HALT(0) END;
  60.   rp := win.rPort; g.SetAPen(rp,1);
  61.  
  62.   g.Move(rp,10,10);
  63.   g.Text(rp,"Die Shepard-Tonskala  erzeugt  den Eindruck eines",49);
  64.   g.Move(rp,10,18);
  65.   g.Text(rp,"scheinbar immer höher  werdenden Tones, der durch",49);
  66.   g.Move(rp,10,26);
  67.   g.Text(rp,"das  zeitversetzte  Spielen  mehrerer  Tonleitern",49);
  68.   g.Move(rp,10,34);
  69.   g.Text(rp,"erreicht wird, wobei die Lautstärke am Anfang und",49);
  70.   g.Move(rp,10,42);
  71.   g.Text(rp,"am  Ende der  Skala  klein  und in der  Mitte der",49);
  72.   g.Move(rp,10,50);
  73.   g.Text(rp,"Skala am größten ist.                            ",49);
  74.  
  75.   i := 0; WHILE i < 4 DO
  76.     arg[i] := i/4;
  77.   INC(i) END;
  78.  
  79.   LOOP
  80.     msg := e.GetMsg(win.userPort);
  81.     IF msg # NIL THEN
  82.       IF I.closeWindow IN msg.class THEN e.ReplyMsg(msg); EXIT END;
  83.       e.ReplyMsg(msg);
  84.     END;
  85.  
  86.     i := 0; WHILE i < 4 DO
  87.       PlayShepard(SHORT(i),arg[i]);
  88.       arg[i] := arg[i] + (1/48);
  89.       IF arg[i] >= 1 THEN arg[i] := arg[i] - 1 END;
  90.     INC(i) END;
  91.  
  92.     d.Delay(20);
  93.   END;
  94.  
  95. CLOSE
  96.   IF win # NIL THEN I.CloseWindow(win) END;
  97. END AudioDemo.
  98.